// APP启动时初始化的相关调用函数 需要APP启动时做的事放这里EG：getUserInfo
import pages from '@/pages.json'
import TencentCloudChat from '@tencentcloud/chat';
import {
	txImInit,
	sendMessageToUser,
} from './tx_im.js'
// import TIMUploadPlugin from 'tim-upload-plugin';
// import TIMProfanityFilterPlugin from 'tim-profanity-filter-plugin';
const install = (Vue, vm) => {
	const vuex_token = uni.getStorageSync('vuex_token')
	const gotoHome = () => {
		uni.reLaunch({
			url: '/pages/login/login'
		})
	}
	// 个推初始化
	const pushInit = (token) => {
		if (!uni.getStorageSync('vuex_token') || token) {
			return
		}
		const GtPush = require('@/static/js/gtpush-min.js')
		let _this = vm;
		GtPush.setDebugMode(true)
		GtPush.init({
			appid: 'RVKySl0UrN75HYccyKN4Q2',
			// 连接成功执行
			onClientId: (res) => {
				_this.cid = res.cid
				_this.$u.post('/app/user/appUserDevice/saveUserDevice', {
					deviceId: res.cid,
					id: vm.vuex_user_info.id
				}).then(res => {
					console.log(res, '向服务端传递cid成功-------------------------');
				})
			},
			onlineState: (res) => {
				_this.online = res.online
			},
			// 消息推送处理
			onPushMsg: (res) => {
				console.log('onPushMsg = ' + typeof res.message, res.message)
				let msgJson = JSON.parse(res.message);
				const data = JSON.parse(msgJson.m_content)
				msgJson = {
					...msgJson,
					m_content: data.data,
					type: data.type
				}
				let options = {
					cover: false,
					sound: 'system',
					title: vm.publicJS.MessageTypeEnum[msgJson.type.toLowerCase()] + vm.$t(
						'myNews.News')
				};
				// 如果
				let jsonD
				let avatar
				if (data.type === 'CONCERN') {
					jsonD = JSON.parse(data.data)
					avatar = vm.$u.file.getMedieUrl(jsonD.avatar)
				} else {
					jsonD = data
					avatar = require('@/static/images/sysMsg.png')
				}
				console.log(jsonD, data, 'res.datares.datares.data');
				const online = {
					text: msgJson.m_title,
					name: vm.publicJS.MessageTypeEnum[msgJson.type.toLowerCase()],
					time: new Date(),
					src: avatar,
					id: new Date().getTime() + '',
					type: 'sys'
				}
				console.log(online, vm.publicJS.MessageTypeEnum[msgJson.type.toLowerCase()]);
				vm.$u.vuex('vuex_online_message_list', [...(vm.vuex_online_message_list || []),
					online
				])

				uni.showTabBarRedDot({
					index: 3
				})
				console.log('个推接收到新的消息');
				vm.$u.vuex('vuex_receive_message_status', vm.vuex_receive_message_status + 1)

				// plus.push.createMessage(msgJson.m_title, null, options);
				// 有新消息获取用户信息
				if (uni.getStorageSync('vuex_token')) {
					vm.$u.get('/app/user/info').then(res => {
						const userInfo = res.data;
						console.log(userInfo, '用戶信息-----------------');
						vm.$store.commit('$uStore', {
							name: 'vuex_user_info',
							value: userInfo
						})
					})
				}
			},
			onError: (res) => {
				console.log('err了', res.error);
			}
		})
	}

	const getUserInfo = (token, init = true) => {
		if (uni.getStorageSync('vuex_token') || token) {
			vm.$u.get('/app/user/info').then(res => {
				const userInfo = res.data;
				console.log(userInfo, '用戶信息-----------------');
				userInfo && vm.$store.commit('$uStore', {
					name: 'vuex_user_info',
					value: userInfo
				})
				
				if (init) {
					// 推送初始化
					pushInit(token)
					queryMessageUnread(token)
					appInitConfig()
				}else{
					// 再次初始化实则只触发 im的登录接口
					txImInit(vm)
				}
			})
		}
	}
	const getCommonConfig = () => {
		vm.$u.get('/api/app/common/environment').then(res => {
			if (res.success) {
				vm.$store.commit('$uStore', {
					name: 'vuex_common_config',
					value: res.data
				})
			}
		})
	}


	const userDefaultTopImg = () => {
		vm.$u.post('/app/h2-sys-config/getConfigKey/userDefaultTopImg').then(res => {
			if (res.success) {
				vm.$store.commit('$uStore', {
					name: 'vuex_userDefaultTopImg',
					value: res.data
				})
			}
		})
	}

	/**
	 * 统一跳转登录的方法
	 * @param callback 需要执行的后续操作
	 */
	const whetherToLogin = (callback) => {
		if (uni.getStorageSync('vuex_token')) {
			if (callback) {
				callback()
			} else {
				uni.showModal({
					title: "callback is must"
				})
			}
		} else {
			gotoHome()
		}
	}

	/**
	 * 统一跳转店铺信息的接口
	 * @param callback 需要执行的后续操作
	 */
	const whetherIsStore = (callback) => {
		if (uni.getStorageSync('vuex_token')) {
			if (vm.userType !== 1) { //userType (0普通用户,1店主,2主播)
				uni.navigateTo({
					url: '/pages/storeIntroduction/storeIntroduction'
				})
			} else {
				if (callback) {
					callback()
				} else {
					uni.showModal({
						title: "callback is must"
					})
				}
			}
		} else {
			gotoHome();
		}
	}
	// 查询未读个数	 	
	const queryMessageUnread = (token) => {
		if (uni.getStorageSync('vuex_token') || token) {
			vm.$u.get('/app/openSysMessage/getUnreadNum').then(res => {
				vm.$u.vuex('vuex_message_unread_content', res.data)
				res.data ? uni.showTabBarRedDot({
					index: 3
				}) : uni.hideTabBarRedDot({
					index: 3
				})
			})
		}
	}
	//  获取初始化使用的配置
	const appInitConfig = () => {
		// 客户端ip ，腾讯云上传id  ， oss 地址 ， 腾讯云 appId , ...appkey
		const configKey = ['clientIp', 'keyId', 'ossImg', 'txCloudAppId', 'txCloudAppKey', 'txCloudLicenceUrl',
			'txCloudLicenceKey', 'gold_coin_exchange_ratio'
		]
		// const pList = configKey.map(m => vm.$u.post('/app/h2-sys-config/getConfigKey/' + m))
		// let config = {}
		// 	Promise.all(pList).then(res => {
		// 		res.forEach((ele, index) => {
		// 			config[configKey[index]] = ele.data
		// 			vm.$u.vuex('vuex_'+[configKey[index]], ele.data)
		// 		})
		// 		console.log(config,'*************************');
		// 		vm.$store.commit('$uStore', {
		// 			name: 'vuex_app_config',
		// 			value: config
		// 		})
		// 		// vm.$u.vuex('vuex_app_config', config)
		// 		// console.log(config,'app---------------设置');
		// 	})
		vm.$u.post('/app/h2-sys-config/getConfigKey/list/' + configKey.splice(',')).then(res => {
			vm.$u.vuex('vuex_app_config', res.data)
			// 读取 app配置并初始化im（因为需要这部分的配置）
			txImInit(vm)
		})
	}
	const route = vm.$u.route
	//  加了name属性
	vm.$u.route = (data, data2) => {
		if (typeof data === 'object') {
			if (data.name) {
				const findPage = pages.pages.find(f => f.name === data.name) || {}
				route(findPage.path, data2)
			} else {
				route(data, data2)
			}
		} else {
			route(data, data2)
		}

	}
	getUserInfo()
	getCommonConfig()
	userDefaultTopImg()
	vm.$u.init = {
		getUserInfo,
		whetherToLogin,
		whetherIsStore,
		queryMessageUnread
	}
}

export default {
	install
}